// baseURL地址
const baseUrl = 'http://192.168.0.11:10081/collegeapi/'
// 前往授权
export const toGrant = () => {
  uni.showModal({
    title: '提示',
    content: '您当前还未登录',
    confirmColor: '#5fc1f3',
    confirmText: '立即登录',
    success({
      confirm,
      cancel
    }) {
      if (confirm) {
        // uni.removeStorage({ key: 'ticket' })
        uni.navigateTo({
          url: '/pages/login/grant/main'
        })
      } else if (cancel) {
        uni.navigateBack()
      }
    }
  })
}

// 用户登录信息相关错误(返回当前的状态码)
/**
 * 10:用户没有登录
 * 11:用户登录失效
 * 12:请先获取验证码
 * 13:验证码错误
 * 14:未绑定账号
 * 15:手机号已注册
 */
export const USER_ERROR = [10, 11, 12, 13, 14]
/**
 * grant
 * -1：取消授权
 * 0：等待授权（默认）
 * 1：已授权
 * 2：前往绑定
 */
let timer = null
/**
 * type：请求方式
 * url：地址
 * data：数据
 * success：成功执行函数
 * complete：完成执行函数
 * check：是否传ticket  //  这个相当于token
 * loading：是否显示loading加载
 * tip：是否前往授权页面
 * status：预期返回的status // 当返回的是自己传过来的状态码执行相对应的代码
 * statusFun: 微信注册时使用
 * */
const request = ({
  method = 'GET',
  url,
  data,
  success,
  complete,
  check = true,
  loading = false,
  tip = true,
  status = [],
  statusFun
}) => {
  return new Promise((resolve, reject) => {
    let grant = uni.getStorageSync('grant')
    // 如果为空，置为等待授权
    if (grant === '') grant = 0
    // 如果为取消授权
    if (grant === -1) {
      // 将授权状态置为等待授权
      uni.setStorageSync('grant', 0)
      // 取消该次ajax请求
      // return false
    }
    loading && uni.showLoading({
      title: '加载中'
    })
    const ticket = uni.getStorageSync('ticket') || ''
    const params = {
      method: method,
      url: `${baseUrl}${url}`,
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      success: ({
        data
      }) => {
        const {
          code,
          msg
        } = data
        // 期望的返回状态
        if (status.includes(code)) {
          // 此处是微信没有注册返回状态码14 然后跳转绑定手机号这个过程就相当于注册了 注册需要 微信登录的code参数
          statusFun && statusFun(data)
          // 状态码，用户没有登录或者登陆信息失效，前往授权
        } else if (USER_ERROR.includes(code)) {
          tip && toGrant()
          return false
        } else if (code === 1) {
          // 请求成功
          success && success(data)
          resolve(data) // Promise 的回调
        } else if (code === 0 || code === -1) {
          // 请求失败
          uni.showToast({
            title: msg,
            icon: 'none'
          })
          // 自主添加
          // complete && complete(data)
        }
      },
      complete: (res) => {
        reject(res) // Promise 的回调
        // 自主添加
        complete && complete(res)
        // 防止同时有多个请求出现多个正在加载的图标
        if (loading) {
          timer && clearTimeout(timer)
          timer = setTimeout(() => {
            uni.hideLoading()
            complete && complete(res)
          }, 500)
        }
      }
    }
    // ticket存在默认传ticket
    check && (params.header.ticket = ticket)
    // 添加data参数
    data && Object.assign(params, {
      data
    })
    uni.request(params)
  })
}


export default request